]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
shellDBus: Add UngrabAccelerators
authorBenjamin Berg <bberg@redhat.com>
Sat, 2 Mar 2019 15:49:55 +0000 (16:49 +0100)
committerBenjamin Berg <benjamin@sipsolutions.net>
Mon, 4 Mar 2019 16:45:16 +0000 (16:45 +0000)
While it is possible to register accelerators in-bulk, there is no
proper way to unregister them again. This adds the corresponding call
for UngrabAccelerator to allow ungrabbing multiple accelerators at the
same time.

The idea is that g-s-d can use this in the future to simplify the
keybinding reload logic.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/429

data/dbus-interfaces/org.gnome.Shell.xml
js/ui/shellDBus.js

index b5b44af7ab0f76dab4bd30e7a660700af9bd8452..1fef302b3412bf34190e5485bcf09df69dff2c0c 100644 (file)
       <arg type="u" direction="in" name="action"/>
       <arg type="b" direction="out" name="success"/>
     </method>
+    <method name="UngrabAccelerators">
+      <arg type="au" direction="in" name="action"/>
+      <arg type="b" direction="out" name="success"/>
+    </method>
     <signal name="AcceleratorActivated">
       <arg name="action" type="u"/>
       <arg name="parameters" type="a{sv}"/>
index 9238b7c3515f0f59871e8f2bae7705d8e2c42729..469a6c7066f24d353eeceef0cfb59679282e9938 100644 (file)
@@ -124,13 +124,20 @@ var GnomeShell = class {
 
     UngrabAcceleratorAsync(params, invocation) {
         let [action] = params;
-        let grabbedBy = this._grabbedAccelerators.get(action);
-        if (invocation.get_sender() != grabbedBy)
-            return invocation.return_value(GLib.Variant.new('(b)', [false]));
+        let sender = invocation.get_sender();
+        let ungrabSucceeded = this._ungrabAcceleratorForSender(action, sender);
+
+        return invocation.return_value(GLib.Variant.new('(b)', [ungrabSucceeded]));
+    }
+
+    UngrabAcceleratorsAsync(params, invocation) {
+        let [actions] = params;
+        let sender = invocation.get_sender();
+        let ungrabSucceeded = true;
+
+        for (let i = 0; i < actions.length; i++)
+            ungrabSucceeded &= this._ungrabAcceleratorForSender(actions[i], sender);
 
-        let ungrabSucceeded = global.display.ungrab_accelerator(action);
-        if (ungrabSucceeded)
-            this._grabbedAccelerators.delete(action);
         return invocation.return_value(GLib.Variant.new('(b)', [ungrabSucceeded]));
     }
 
@@ -174,6 +181,16 @@ var GnomeShell = class {
         let ungrabSucceeded = global.display.ungrab_accelerator(action);
         if (ungrabSucceeded)
             this._grabbedAccelerators.delete(action);
+
+        return ungrabSucceeded;
+    }
+
+    _ungrabAcceleratorForSender(action, sender) {
+        let grabbedBy = this._grabbedAccelerators.get(action);
+        if (sender != grabbedBy)
+            return false;
+
+        return this._ungrabAccelerator(action);
     }
 
     _onGrabberBusNameVanished(connection, name) {